/***********************************************************************************
 * 文件名： mcu_top.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		MCU 所有的驱动顶层文件，使用MCU驱动只用包含这一个文件即可。
 * 修改记录：
 * 	2020/8/18: 初版。 刘言。
***********************************************************************************/
#ifndef _MCU_TOP_H_
#define _MCU_TOP_H_

#ifdef __cplusplus
 extern "C" {
#endif

#include "sdk_config.h"
#include "mcu.h"
#include "log.h"
#include "clock.h"
#include "timer.h"
#include "rtc.h"
// #include "i2c_master.h"
#include "watchdog.h"
#include "key.h"
#include "spi.h"
#include "dma.h"
#include "flash.h"
#include "pwrmgr.h"
#include "version.h"
#include "cst92f2x.h"
#include "jump_function.h"
#include "rf_phy_driver.h"
#include "osal_snv.h"
#include "fs.h"
#include "common.h"

/* OSAL */
#include "OSAL.h"
#include "OSAL_Tasks.h"
#include "OSAL_PwrMgr.h"
#include "osal_snv.h"

#include "..\ARM\typedef.h"

#include "sdk_main.h"

#include "cst92f25_lydrv_config.h"

///////////////////////////// 参数检查

#if (DEFAULT_SYS_CLK_SRC == 2)
    #define F_HCLK  16
#elif (DEFAULT_SYS_CLK_SRC == 3)
    #define F_HCLK  48
#elif (DEFAULT_SYS_CLK_SRC == 4)
    #define F_HCLK  64
#elif (DEFAULT_SYS_CLK_SRC == 5)
    #define F_HCLK  96
#else
    #error "DEFAULT_SYS_CLK_SRC Error!"
#endif

#define SYSTICK_VALUE       (10 * 1000l * F_HCLK)   // 1~0xFFFFFF

///////////////////////////// 参数计算


///////////////////////////// 提供的API

/*
    进入低功耗。
    低功耗模式下polsys任务停止执行，BLE低功耗状态，可以被连接和使用，IO口中断和BLE连接事件可以被响应。
    仅在 CFG_SLEEP_MODE == 2 时才有效。
    调用函数仅进行标记，将在Polsys当前就绪任务处理完毕后进入低功耗。
*/
void Mcu_EnterLowPower();

// 退出低功耗
// 当特定的IO口中断或BLE连接事件发生后可以调用此函数退出低功耗来继续执行Polsys任务。
// 用户可以重定义唤醒回调函数 Mcu_EventExitLowPower 。
void Mcu_ExitLowPower();

#define UID_ADDR	0x11001000
#define UID_LEN		12
/**
 * 获取UID（实际上是出厂MAC + ADC校准值），共 12 字节
*/
STATIC_FORCE_IN_LINE u8 * Mcu_GetUid()
{
    return (u8 *)UID_ADDR;
}
/**
 * 获取UID长度（本MCU固定为12）
*/
STATIC_FORCE_IN_LINE int Mcu_GetUidLength()
{
    return UID_LEN;
}

#define MAC_ADDR    0x11001000
/**
 * 获取FLASH中保存的出厂MAC地址，注意理解为将最低字节显示在最右侧。
*/
STATIC_FORCE_IN_LINE u8 * Mcu_GetMac()
{
    return (u8 *)MAC_ADDR;
}

// 初始化看门狗,8秒超时
#define Wdt_Init()              HalWdtInit(ENABLE, WDG_USE_POLLING_MODE, NULL) 

#define Wdt_Clear()             HalWdtFeed()

// 设置 SysClk(HCLK)
// 注意： 设置后 F_HCLK 宏可能错误。
void Mcu_SetSysClkSrc(sysclk_t new_clk_src);

// 提供给 Polsys 调用
void Mcu_Init(void);
#define Mcu_TickStart() OSAL_Init() // 启动系统节拍定时器，这里实际是先启动SDK内置的OSAL系统，在OSAL跑起来后的任务函数中再启动系统节拍定时器
#define Mcu_EnableInt() __enable_irq()                // 开全局中断
#define Mcu_DisableInt() __disable_irq()              // 关全局中断


#include "mcu_gpio.h"
#include "mcu_delay.h"
#include "mcu_spi.h"
#include "mcu_ble.h"
// #include "adc.h"
#include "mcu_adc.h"

#ifdef __cplusplus
}
#endif

#endif

